package com.sun.temp.netty;

import static java.lang.Thread.sleep;

/**
 * 客户端handler
 */
//@Component
//@ChannelHandler.Sharable
//public class NettyClientHandler extends SimpleChannelInboundHandler<String> {
//
//    private static final Log log = LogFactory.getLog(NettyClientHandler.class);
//
//    @Autowired
//    private FilePathService filePathService;
//
//    @Autowired
//    private MaterialService materialService;
//
//    @Resource
//    private FilePathDao filePathDao;
//
//    @Resource
//    private QakansaDao qakansaDao;
//
//    @Override
//    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
//        System.out.println("收到的消息" + msg);
//
//        String[] split = msg.split(",");
//        for (String string2 : split) {
//            System.out.println("数据-->>>" + string2);
//        }
//        // 状态 1-失败 0-成功
//        String status = split[1];
//        System.out.println("返回状态status -->>>" + status);
//
//        if (status.equals("0")) {
//            log.info("视觉返回成功success ========================================");
//
//            // 批次
//            String batchNo = split[2];
//            System.out.println("批次batchNo -->>>" + batchNo);
//
//            //批次前面有M,视觉识别用的，去掉
//            batchNo = removeFirstM(batchNo);
//            System.out.println("去掉M>>>>>>>>>>>>>>>>"+batchNo);
//
//            // 批次有换行符号，去掉
//            if(batchNo.indexOf("\r") != -1){
//                batchNo = batchNo.replaceAll("[\t\n\r]","");
//            }
//
//            // 根据批次号到oracle数据库中查询
//            Qakansa qa = qakansaDao.getByBatch(batchNo);
//            if (qa == null) {
//                // 比对失败
//                log.info("oracle查询失败，未找到数据error ==========================================");
//                // 比对失败
//                // 发送：为9-上位机发送视觉货物丢掉
//                PLCUtil.writeInt16("VW1002", 9);
//                log.info("发送 为9-上位机发送视觉货物丢掉");
//                // TODO 丢弃后需要再次发起复位
//            } else {
//                String grade = qa.getITM_CD();
//                System.out.println("等级grade -->>>" + grade);
//                //去掉空格
//                String  newGrade = grade.replace(" ","-");
//                System.out.println("等级newGrade -->>>" + newGrade);
//                String path = filePathDao.selectOne(new QueryWrapper<FilePath>().eq("type", 2)).getFilepath();
//
//                // 创建存储文件目录，并把文件目录存到数据库file_path表，后续扫描监控文件
//                createStorgeFolder(newGrade, batchNo, path);
//
//                // 根据批次号和等级确认一条数据，status =1，插入数据库,oracle批次会最后多一个字母8位，我们但是7位
//                this.saveMaterial(grade, qa.getLOT_NO(), path);
//
//                // RPA输入等级和批次
//                inputBacthAndGrade(newGrade, batchNo, path);
//
//                // 修改顶针位置
//                initPosition();
//
//                //发送：为2-上位机发送从视觉上料
//                PLCUtil.writeInt16("VW1002", 2);
//                log.info("发送 为2-上位机发送从视觉上料");
//            }
//        } else {
//            log.info("视觉返回失败error ==========================================");
//            // 比对失败
//            // 发送：为9-上位机发送视觉货物丢掉
//            PLCUtil.writeInt16("VW1002", 9);
//            log.info("发送 为9-上位机发送视觉货物丢掉");
////            sleep(3000);
////            丢弃后重新开始下一次任务
////            发送VW1000 为3-复位
////            PLCUtil.writeInt16("VW1000", 3);
////            sleep(3000);
////            归零
////            PLCUtil.writeInt16("VW1000", 0);
////            sleep(3000);
////            PLCUtil.writeInt16("VW1000", 1);
//        }
//        ReferenceCountUtil.release(msg);
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
//        log.info("channel exceptionCaught,error reason:" + cause.getMessage() + "server address:" + ctx.channel().remoteAddress());
//        cause.printStackTrace();
//        Map.Entry<String, NettyManager.NettyEntity> server = NettyServerMap.remove(ctx.channel());
//        if (server != null && NettyServerMap.getInvalid(server.getKey()) == null) {
//            NettyServerMap.addInValid(server.getKey(), server.getValue());
//        }
//    }
//
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        log.info("channel channelActive,Client active.server address:" + ctx.channel().remoteAddress());
//        super.channelActive(ctx);
//    }
//
//    @Override
//    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
//        log.info("channel channelInactive.server address:" + ctx.channel().remoteAddress());
//        Map.Entry<String, NettyManager.NettyEntity> server = NettyServerMap.remove(ctx.channel());
//        if (server != null && NettyServerMap.getInvalid(server.getKey()) == null) {
//            NettyServerMap.addInValid(server.getKey(), server.getValue());
//        }
//    }
//
//    /**
//     * 检查指定时间内有没有收到服务器端返回
//     *
//     * @param ctx
//     * @param evt
//     * @throws Exception
//     */
//    @Override
//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//        if (evt instanceof IdleStateEvent) {
//            IdleStateEvent event = (IdleStateEvent) evt;
////            log.info("write idle,send ping.server address:" + ctx.channel().remoteAddress());
//
//        }
//    }
//
//    public static String removeFirstM(String str) {
//        if (str.length() > 0 && str.charAt(0) == 'M') {
//            return str.substring(1); // 如果第一个字符是'M'，则去掉它
//        }
//        return str; // 如果第一个字符不是'M'，则返回原字符串
//    }
//
//    /**
//     * 插入一条数据到数据库
//     */
//    public void saveMaterial(String grade, String batchNo, String path) {
//        LocalDate currentDate = LocalDate.now();
////        String path = "D:\\TMADATA\\G\\";
//        String foldPath = path + grade + "\\" + currentDate.getYear() + "\\" + batchNo+ "\\" + batchNo;
//
//        //如果库里有状态为1的数据，异常操作产生的，改为已失效状态3
//        List<Material> list = materialService.queryMaterialByStatus(1);
//        if(list.size() > 0){
//            for (Material m : list){
//                if(m.getStatus() == 1){
//                    m.setStatus(3);
//                }
//            }
//            materialService.updateBatchById(list);
//        }
//
//        Material material = new Material();
//        material.setBatch(batchNo);
//        material.setGrade(grade);
//        material.setStatus(1);
//        material.setFilePath(foldPath);
//        material.setCreate_time(new Date());
//        materialService.save(material);
//    }
//
//    /**
//     * 创建存储加热数据保存目录
//     */
//    public void createStorgeFolder(String grade, String batchNo, String path) {
//        LocalDate currentDate = LocalDate.now();
//        // String foldPath = path + grade +"\\" +currentDate.getYear() + "\\" + batchNo;
//        // 根据等级+年份+批次号 创建目录
//        String foldPath = path + grade + "\\" + currentDate.getYear() + "\\" + batchNo;
//
//        File newFolder = new File(foldPath);
////        if (!newFolder.exists()) {
////            newFolder.mkdirs();
////        }
//        deleteFolder(newFolder);
//        newFolder.mkdirs();
//        // 文件目录存储到数据库表file_path
//        FilePath filePath = filePathService.getOne(new QueryWrapper<FilePath>().eq("type", "1"));
//        filePath.setFilepath(foldPath);
//        filePathService.updateById(filePath);
//    }
//
//    public void deleteFolder(File folder){
//        if(folder.exists()){
//            File[] files = folder.listFiles();
//            if(files != null){
//                for (File file : files){
//                    if(file.isDirectory()){
//                        deleteFolder(file);
//                    }else {
//                        file.delete();
//                    }
//                }
//            }
//            folder.delete();
//        }
//    }
//
//    /**
//     * RPA输入批次和等级
//     *
//     * @return
//     * @throws Exception
//     */
//    public Result inputBacthAndGrade(String grade, String batchNo, String path) throws IOException {
//
//        System.out.println("RPA输入批次和等级>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\inputBacthAndGrade.py";
//
//        // 要传递给Python脚本的参数
//        String arg1 = grade;
//        LocalDate currentDate = LocalDate.now();
////        String path = "D:\\TMADATA\\G\\";
//        String foldPath = path + grade + "\\" + currentDate.getYear() + "\\" + batchNo+ "\\" + batchNo;
//        String arg2 = foldPath;
//
//        ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScript, arg1, arg2);
//        Process process = processBuilder.start();
//
//        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//        StringBuilder output = new StringBuilder();
//        String line;
//
//        while ((line = reader.readLine()) != null) {
//            System.out.printf(line);
//            output.append(line).append("\n");
//        }
//
//        int exitCode = -1;
//        try {
//            exitCode = process.waitFor();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            if (exitCode == 0) {
//                System.out.println("Python脚本成功运行！输出结果为:\n" + output.toString());
//            } else {
//                System.err.println("Python脚本运行失败！退出码为:" + exitCode);
//            }
//
//            process.destroy();
//        }
//        return Result.success();
//    }
//
//
//    /**
//     * 初始化玻璃管和顶针位置
//     *
//     * @return
//     * @throws Exception
//     */
//    public void initPosition() throws Exception {
//
////        sleep(6);
//        // Python脚本路径及参数
//        String pythonScript = "D:\\zydm\\code\\sumimoto-rob\\doc\\prepare.py";
//        ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScript);
//        Process process = processBuilder.start();
//
//        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//        StringBuilder output = new StringBuilder();
//        String line;
//
//        while ((line = reader.readLine()) != null) {
//            System.out.printf(line);
//            output.append(line).append("\n");
//        }
//
//        int exitCode = -1;
//        try {
//            exitCode = process.waitFor();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            if (exitCode == 0) {
//                System.out.println("Python脚本成功运行！输出结果为:\n" + output.toString());
//            } else {
//                System.err.println("Python脚本运行失败！退出码为:" + exitCode);
//            }
//
//            process.destroy();
//        }
//    }
//
//}
